// msi/MSI11.js
// MSI-11 条码编码器（Modified Plessey + Mod 11 校验）
// 在原始数据后添加一个 Mod 11 校验位

import MSI from './MSI.js';
import { mod11 } from './checksums.js';

/**
 * MSI-11 条码类（基于 MSI，添加 Mod 11 校验位）
 *
 * 规则：
 * - 基于 MSI 编码规则
 * - 自动计算并附加 Mod 11 校验位（加权模 11）
 * - 输入应为纯数字字符串
 * - 校验位范围：0–10（若为 10，某些系统用 'X' 表示）
 *
 * 示例：
 *   输入: '12345'
 *   计算 Mod 11: mod11('12345') = 2
 *   实际编码数据: '123452'
 */
class MSI11 extends MSI {
  /**
   * 构造函数
   * @param {string} data - 原始数字字符串（不含校验位）
   * @param {Object} options - 条码配置项
   */
  constructor(data, options) {
    const checksum = mod11(data);
    super(data + checksum, options);

    // 可选：保留原始数据和校验位
    this.originalData = data;
    this.checksum = checksum;
  }

  /**
   * 验证输入是否为纯数字
   * @returns {boolean}
   */
  valid() {
    return /^[0-9]+$/.test(this.originalData || this.data);
  }

  /**
   * 获取校验位（可用于验证或调试）
   * @returns {number} 0–10
   */
  getChecksum() {
    return this.checksum;
  }
}

export default MSI11;